#!/usr/bin/env python

import utiles
import servers
import MySQLdb
import MySQLdb.cursors
from decimal import Decimal
import sys
import os

host=servers.host
user=servers.user
passwd=servers.passwd
db_name=servers.db_name

miBD=MySQLdb.connect(host=host,user=user,passwd=passwd,db=db_name)
miCursor=miBD.cursor()
miBDDict=MySQLdb.connect(host=host,user=user,passwd=passwd,db=db_name, cursorclass=MySQLdb.cursors.DictCursor)
miCursorDict=miBDDict.cursor()


def ordenCruda(consultaSQL):
    miCursor.execute(consultaSQL)
    auxiliar = miCursor.fetchall()
    return auxiliar

def ordenCrudaDict(consultaSQL, previo="SELECT 1"):
    miCursorDict.execute(previo)
    miCursorDict.execute(consultaSQL)
    auxiliar = miCursorDict.fetchall()    
    return auxiliar

def espacios(nrofactura,rellenar):
    aux = ""
    nrofactura = str(nrofactura)
    for i in range(rellenar-len(nrofactura)):
        aux += " "
    return aux+nrofactura

def invertirFecha(fecha):
    fecha = str(fecha)
    return fecha[8:10]+"-"+fecha[5:7]+"-"+fecha[0:4]

# *****************************************************************************

def listaClientes():
    sql = "SELECT idcliente,nombre FROM cliente"
    listaClientes = ordenCruda(sql)
    return listaClientes

def deudaUnCliente(idcliente,nombre):
    totalDeuda = Decimal("0.00")
    bandera = False
    marca = ""

    sql = "SELECT montocuota,montopagado FROM vtas_ctasctes WHERE idcliente = '%s' AND montocuota <> montopagado AND montocuota>0" % (idcliente)
    listaDeuda = ordenCrudaDict(sql)
    sql = "SELECT saldoinicial FROM saldos WHERE idcliente = '%s'" % (idcliente)
    saldomigracion = ordenCruda(sql)
    sql = "SELECT preciofinal FROM vtas_nc WHERE idcliente = '%s'" % (idcliente)
    listaNC = ordenCruda(sql)

    if listaDeuda != ():
        for deuda in listaDeuda:
            diferencia = deuda['montocuota'] - deuda['montopagado']
            if diferencia >= Decimal("0.00"):
                totalDeuda += diferencia
            else:
                marca = "<= saldo a favor por NC"
        bandera = True
    if saldomigracion != ():
        if saldomigracion[0][0] > Decimal("0.00"):
            totalDeuda += saldomigracion[0][0]
            bandera = True
    if listaNC != ():
        for nc in listaNC:
            totalDeuda -= nc[0]
        bandera = True

    if bandera: 
        print idcliente,nombre,"$",totalDeuda,marca
    return totalDeuda

# *****************************************************************************

if __name__ == '__main__':

    listaClientes = listaClientes()
    totalGeneral = Decimal("0.00")
    for cliente in listaClientes:
        totalGeneral += deudaUnCliente(cliente[0],cliente[1])
    print "Total general adeudado por clientes = $",totalGeneral
    
    miCursor.close()
    miBD.close()
